import { defineStore } from 'pinia'
import { ref } from 'vue'
import { getMessageIsReadCountAPI, setMessageReadAPI } from '@/services/message'

// 定义 Store
export const useMessageStore = defineStore(
  'message',
  () => {
    const unReadCount = ref(0)

    /**
     * 获取当前用户的未读消息数量
     */
    const getUnReadCount = async () => {
      try {
        const res = await getMessageIsReadCountAPI(0)
        if (res.code === 200 && res.message) {
          unReadCount.value = res.data
        }
      } catch (error) {
        uni.showToast({ icon: 'error', title: error })
      }
    }

    /**
     * 设置当前消息未已读
     * @param {*} messageId 消息id
     */
    const setMessageRead = async (messageId) => {
      try {
        const res = await setMessageReadAPI(messageId)
        if (res.code === 200 && res.message) {
          getUnReadCount()
        }
      } catch (error) {
        uni.showToast({ icon: 'error', title: error })
      }
    }

    return {
      unReadCount,
      getUnReadCount,
      setMessageRead,
    }
  },
  {
    // 注意：模块必须开启持久化，才会持久化！
    // 注意：默认持久化，只在H5端有效，因为默认使用的是localStorage，小程序端不能使用这个API，所以需要重写存取方法，转调给UniApp的持久化方法
    // persist: true,
    // 小程序端配置
    persist: {
      storage: {
        getItem(key) {
          return uni.getStorageSync(key)
        },
        setItem(key, value) {
          uni.setStorageSync(key, value)
        },
      },
    },
  },
)
